import defaultPage from "@/pages.json";
import { getToken } from "@/utils/auth";
import { getItem } from "@/utils/localStorage";
/**
 * @description 自定义路由拦截
https://www.jianshu.com/p/bae4cf971343
 */

// 白名单（需要权限的）
const whiteList = [
  "/", // 注意入口页必须直接写 '/'
  // "/pages/express/index",
  "/pagesA/personalCenter/index",
  "/pagesA/myWallet/index",
  "/pagesA/orderRanking/index",
  "/pagesA/myOrder/index",

  // { pattern: /^\/pages\/list.*/ }, // 支持正则表达式
  // "/pages/classify/classify",
  // "/pages/details/details",
  // {
  //   pattern: /^\/pages\/login\/*/,
  // },
];

export default async function () {
  const list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
  // 用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器
  list.forEach((item) => {
    uni.addInterceptor(item, {
      invoke(e) {
        const url = e.url.split("?")[0]; // 获取要跳转的页面路径（url去掉"?"和"?"后的参数）
        console.log("路由：", url);
        // console.log('url路由拦截-地址', url)
        if (url !== "/pagesA/oneClickLogin/index") {
          //并缓存要去的页面路由以便用户登录成功后直接跳转
          uni.setStorageSync("toRouter", url);
          // console.log('不是login')
        }

        let pass;
        if (whiteList) {
          // 判断当前窗口是白名单，如果是则不重定向路由
          pass = whiteList.some((item) => {
            if (typeof item === "object" && item.pattern) {
              return item.pattern.test(url);
            }
            return url === item;
          });
        }

        // 拿到主包，分包页面信息
        const { pages, subPackages } = defaultPage;

        // 所有的页面
        let newArrPage = [];
        //  主包页面
        pages.map((item) => {
          newArrPage.push(item);
        });
        // 分包页面（因为分包里的数据比较特殊）
        subPackages.map((item) => {
          // item.pages.map((item2) => {
          //   arrPageList.push(item2);
          // });

          item.pages.map((item2) => {
            let app = {
              path: item.name + "/" + item2.path,
              meta: item2?.meta,
            };
            newArrPage.push(app);
          });
        });

        // 遍历所有页面path 和 将即将想去的页面 做对比（拿到页面上meta信息就可以判断当前是否需要接单后才可以访问）
        newArrPage = newArrPage.find((item) => `/${item.path}` == url);

        // console.log("newArrPage：", newArrPage);
        const token = getToken();
        const userInfo = getItem("userInfo");
        // // console.log('url路由拦截-用户缓存', pass, userInfo, !userInfo)
        // // 是白名单并且没有token

        // 如果当前页面未开放
        if (newArrPage.meta?.notOpen) {
          uni.showModal({
            title: "提示",
            content: "暂未开放",
            showCancel: false,
            confirmText: "确定",
          });
          return false;
        }

        // 必须登录
        // if (pass) {
        if (newArrPage.meta?.login) {
          if (!token) {
            // 没有token（未登录）
            // 没有登录
            uni.showModal({
              title: "提示",
              content: "请先登录",
              confirmText: "去登录",
              success: function (res) {
                if (res.confirm) {
                  console.log("用户点击确定");
                  uni.navigateTo({
                    url: "/pagesC/login/index",
                  });
                } else if (res.cancel) {
                  console.log("用户点击取消");
                }
              },
            });
            return false;
          }
          // return false;
          // 需要登录并申请了接单
          if (newArrPage.meta?.order) {
            // 没有申请接单
            if (userInfo.authType == 0) {
              // 资料审核中
              if (userInfo.studentIsApply == 1) {
                uni.showModal({
                  title: "提示",
                  content: "资料审核中",
                  showCancel: false,
                });
                return false;
              }

              // 没有接单权限
              uni.showModal({
                title: "提示",
                content: "请先申请接单",
                confirmText: "去申请",
                success: function (res) {
                  if (res.confirm) {
                    console.log("用户点击确定");
                    uni.navigateTo({
                      url: "/pagesA/applyOrder/index",
                    });
                  } else if (res.cancel) {
                    console.log("用户点击取消");
                  }
                },
              });
              return false;
            }
          }
        }

        return e;
      },
      fail(err) {
        // 失败回调拦截
        console.log(err);
      },
    });
  });
}
